package bancosys.tec.datadigester.fileregistry.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import bancosys.tec.datadigester.fileregistry.domain.FileRegistry;
import bancosys.tec.datadigester.fileregistry.domain.enumx.Frequency;
import bancosys.tec.persist.dao.BaseDAO;
import bancosys.tec.persist.dao.BeanNotFoundException;

/**
 * @author piercio
 */
public class FileRegistryDAO extends BaseDAO<FileRegistry> {

    /**
     * Retorna todos os arquivos de importa√ß√£o com a periodicidade passada.
     * 
     * @param frequency a periodicidade dos arquivos de impora√ß√£o.
     * @return todos os arquivos de importa√ß√£o com a periodicidade passada.
     */
    public List<FileRegistry> findyByFrequency(Frequency frequency) {
        Criteria crit = this.createCriteria();

        if (frequency != null) {
            crit.add(Restrictions.eq("frequency", frequency));
        }

        return this.executeQuery(crit);
    }

    /**
     * Retorna o registro de arquivo de importa√ß√£o com o c√≥digo passado.
     * 
     * @param fileCode o c√≥digo do arquivo de importa√ß√£o.
     * @return o registro de arquivo de importa√ß√£o com o c√≥digo passado.
     * @throws BeanNotFoundException caso n√£o haja registro no banco com esse c√≥digo.
     */
    public FileRegistry findByFileCode(String fileCode) throws BeanNotFoundException {
        Criteria crit = this.createCriteria();
        crit.add(Restrictions.eq("fileCode", fileCode));
        return this.executeSingleQuery(crit);
    }

    /**
     * Retorna todos os registros que tenham alguma frequancia (di√°ria ou mensal).
     * 
     * @return todos os registros que tenham alguma frequancia (di√°ria ou mensal).
     */
    public List<FileRegistry> findAllWithFrequency() {
        Criteria crit = this.createCriteria();
        crit.add(Restrictions.ne("frequency", Frequency.NONE));
        return this.executeQuery(crit);
    }
}
